#include "cppTutorPureVirtualDestructor.h"

#include <iostream>

using namespace std;

#include "cppTutorLog.h"
extern CcppTutorLog Log;

class CPVDBase
{
    public:
        CPVDBase ();
        virtual ~CPVDBase () = 0;
};

CPVDBase :: CPVDBase ()
{
    Log << "ENTER : CPVDBase :: CPVDBase" << __FILE__ << endl;
    Log << "EXIT  : CPVDBase :: CPVDBase" << __FILE__ << endl; 
}

CPVDBase :: ~CPVDBase ()
{
    Log << "ENTER : CPVDBase :: ~CPVDBase" << __FILE__ << endl;
    Log << "EXIT  : CPVDBase :: ~CPVDBase" << __FILE__ << endl; 
}

class CPVDDerived : public CPVDBase
{
    public:
        CPVDDerived ()
        {
            cout << "CPVDDerived :: CPVDDerived" << endl;
        }
        // no overriding destructor id required, base destructor  is pure
        ~CPVDDerived ()
        {
            cout << "CPVDDerived :: ~CPVDDerived" << endl;
        }           
};